package io.github.wslxm.springbootplus2.utils;

import io.github.wslxm.springbootplus2.core.constant.SecretTypeConst;
import io.github.wslxm.springbootplus2.core.result.Result;
import io.github.wslxm.springbootplus2.core.utils.bean.XjSpringContextUtil;
import io.github.wslxm.springbootplus2.gateway.aopfilter.EncryptFilter;

/**
 * XjSecret 加密/解密/ 脱敏工具类
 *
 * <P>
 *     第一层的解析依赖 XjSecret 下的 isNext=true 参数, 这里借助 Result 对象
 * </P>
 *
 * @author wangsong
 * @date 2023/10/17
 */
public class XjSecretUtil {

    /**
     * 脱敏
     *
     * @param t 支持传入 page / 任意集合 / 任意实体
     */
    public static <T> void desensitization(T t) {
        EncryptFilter sysEncrypt = XjSpringContextUtil.getBean(EncryptFilter.class);
        sysEncrypt.decryptOrEncryptEntity(Result.success(t), SecretTypeConst.TWO);
    }

    /**
     * 加密
     *
     * @param t 支持传入 BasePage / 任意集合 / 任意实体
     */
    public static <T> void encrypt(T t) {
        EncryptFilter sysEncrypt = XjSpringContextUtil.getBean(EncryptFilter.class);
        sysEncrypt.decryptOrEncryptEntity(Result.success(t), SecretTypeConst.TWO);
    }

    /**
     * 解密
     *
     * @param t 支持传入 BasePage / 任意集合 / 任意实体
     */
    public static <T> void decrypt(T t) {
        EncryptFilter sysEncrypt = XjSpringContextUtil.getBean(EncryptFilter.class);
        sysEncrypt.decryptOrEncryptEntity(Result.success(t), SecretTypeConst.OEN);
    }
}